home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
C/C++ Interactive Reference Guide
/
C-C++ Interactive Reference Guide.iso
/
c_ref
/
csource5
/
342_01
/
diofnc04.c
< prev
next >
Wrap
C/C++ Source or Header
|
1991-02-25
|
3KB
|
83 lines
/*-
* ----------------------------------------------------------------------
* File : DIOFNC04.C
* Creator : Blake Miller
* Version : 01.01.00 February 1991
* Language : Microsoft C Version 5.1
* Purpose : Intel 8255 Compatible Digital IO Functions
* Bit Get Function
* ----------------------------------------------------------------------
* Revision History:
* 022891 BVM : Change int to short.
* 070490 BVM : Creation
* ----------------------------------------------------------------------
*/
#define DIOFNC04_C_DEFINED 1
#include "DIOLIB.H"
#undef DIOFNC04_C_DEFINED
void dio_bitget (DIODAT *data, short bit, short *state);
/*- DIO : Bit Get ----------------------------**
* Read one of the bits in the 8255.
* A state of 1 indicates a set bit and a state of 0
* indicates a clear bit.
* The bit number should be from 0 - 23 as follows:
* 0 = Port A Bit 0; 7 = Port A Bit 7
* 8 = Port B Bit 0; 15 = Port B Bit 7
* 16 = Port C Bit 0; 23 = Port C Bit 7
* Passed:
* pointer : DIODAT
* short : bit number
* pointer : short : state : 1 = SET, 0 = CLEAR
* Returns:
* nothing
* Loads stat with approrpiate error code.
* Loads state with 0 or 1.
*/
void dio_bitget (DIODAT *data, short bit, short *state)
{
short port; /* port number */
unsigned char ival; /* in value */
/* Make sure the bit requested is valid.
* Three ports of 8 bits each = 24 total bits.
* This will also validate the port number used later.
*/
if ( (bit < 0) || (bit > 23) ){
data->stat = DIO_ST_BB;
return;
}
/* The bit number should have zero offset.
* This is useful for lining up the port with integer
* divide and it is also used for left shifting to
* create a mask.
* Get port number by doing integer division. The port
* number should end up as 0, 1, or 2, corresponding to
* PORT A, PORT B, and PORT C respectively.
* Then do modulo 8 to get the corrsponding bit
* number to be used in the particular byte. This
* value will end up being 0 - 7.
*/
port = ( bit / 8); /* port number (0 - 2) */
bit = bit % 8; /* modulo to get the bit number */
/* Input data.
* Right shift data to line it up with the proper bit.
*/
dio_bget ( data->base + port, &ival );
ival = ival >> bit; /* left shift input data */
ival = ival & 0x01; /* mask out upper bits */
*state = (short) ival; /* load value */
data->stat = DIO_ST_OK;
}
/*-
* ----------------------------------------------------------------------
* END DIOFNC04.C Source File
* ----------------------------------------------------------------------
*/